package com.vates.gestion.dao.impl;
import java.util.List;
import javax.persistence.*;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.vates.entidades.Hotel;

import com.vates.gestion.dao.BaseDAOHotel;

@Repository(value = "hotelDAO")
public class HotelDAOImpl implements BaseDAOHotel<Hotel> {

	private EntityManager em;

	@PersistenceContext
	public void setEntityManager(EntityManager em) {
		this.em = em;
	}

	@Override
	@Transactional(readOnly = false)
	public Hotel nuevo(Hotel entidad) {
		Hotel h = em.merge(entidad);
		System.out.println("Agregado Hotel "+  h.getNombre());
		return h;
	}
	
	@Override
	@Transactional(readOnly = true)
	@SuppressWarnings("unchecked")
	public List<Hotel> buscarTodos() {
		List<Hotel> results = em.createQuery("SELECT h FROM Hotel h")
				.getResultList();
		return results;
	}

	
	@SuppressWarnings("unchecked")
	@Override
	public List<Hotel> buscarPorNombre(String nombre) {

		List<Hotel> results = em.createQuery(
				"SELECT h FROM Hotel h WHERE :nombre LIKE h.nombre")
				.setParameter("nombre", nombre).getResultList();

		return results;
	}

	
	@SuppressWarnings("unchecked")
	public List<Hotel> buscarPorLocalidad(String localidad) {
		List<Hotel> results = em
				.createQuery(
						"SELECT h FROM Hotel h WHERE :localidad LIKE h.localidad")
				.setParameter("localidad", localidad).getResultList();
		return results;
	}

	@Override
	@Transactional(readOnly = false)
	public void eliminar(int id) {
		Hotel h = em.find(Hotel.class, id);
		em.remove(h);
		System.out.println("Eliminado el num " + id);
	}

	@Override
	@Transactional(readOnly = false)
	public void modificar(Hotel entidad) {
		Hotel hotel = new Hotel();
		if (entidad.getId_Hotel() != 0) {
			em.merge(hotel);
		} else {
			em.persist(hotel);
		}
	}
	
	@Override
	public Hotel buscarPorId(int id) {
		Hotel hotel = em.find(Hotel.class, id);
		return hotel;
	}

}
